package plus.easydo.server.user.mp.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import plus.easydo.server.user.mp.dto.TenantDto;
import plus.easydo.server.user.mp.entity.Tenant;
import plus.easydo.server.user.mp.mapper.TenantMapper;
import plus.easydo.server.user.mp.qo.TenantQo;
import plus.easydo.server.user.mp.service.ITenantService;
import plus.easydo.server.user.mp.vo.TenantVo;
import plus.easydo.starter.oauth.core.utils.Oauth2Utils;
import plus.easydo.utils.ResultConvertUtil;

import java.util.Arrays;
import java.util.List;


/**
 * 租户管理Service业务层处理
 * 
 * @author gebilaoyu
 * @date 2021-07-14 15:01:22
 */
@Service
public class TenantServiceImpl extends ServiceImpl<TenantMapper, Tenant> implements ITenantService
{

    /**
     * 查询租户管理
     * 
     * @param id 租户管理ID
     * @return 租户管理
     */
    @Override
    public TenantVo selectById(String id) {
        Tenant tenant = baseMapper.selectById(id);
        return ResultConvertUtil.convertVo(tenant,TenantVo::new);
    }

    /**
     * 分页条件查询租户管理列表
     * 
     * @param qo 查询条件封装
     * @return 租户管理
     */
    @Override
    public IPage<TenantVo> page(TenantQo qo) {
        IPage<Tenant> page = qo.startPage();
        IPage<Tenant> iPage = baseMapper.selectTenantList(page, qo);
        List<TenantVo> voList = ResultConvertUtil.copyList(iPage.getRecords(), TenantVo::new);
        Page<TenantVo> voPage = new Page<>();
        BeanUtils.copyProperties(iPage,voPage);
        voPage.setRecords(voList);
        return voPage;
    }

    /**
     * 获取所有租户管理列表
     *
     * @param qo 查询条件封装
     * @return 租户管理
     */
    @Override
    public List<TenantVo> list(TenantQo qo) {
        List<Tenant> list = baseMapper.selectList(Wrappers.query());
        return ResultConvertUtil.copyList(list,TenantVo::new);
    }

    /**
     * 新增租户管理
     * 
     * @param dto 数据传输对象
     * @return 结果
     */
    @Override
    public int insert(TenantDto dto) {
        Tenant tenant = Tenant.builder().build();
        BeanUtils.copyProperties(dto, tenant);
        tenant.buildCreateTime();
        tenant.setCreateBy(Oauth2Utils.getUserIdString());
        return baseMapper.insert(tenant);
    }

    /**
     * 修改租户管理
     * 
     * @param dto 数据传输对象
     * @return 结果
     */
    @Override
    public int update(TenantDto dto) {
        Tenant tenant = Tenant.builder().build();
        BeanUtils.copyProperties(dto, tenant);
        tenant.buildUpdateTime();
        tenant.setUpdateBy(Oauth2Utils.getUserIdString());
        return baseMapper.updateById(tenant);
    }

    /**
     * 批量删除租户管理
     * 
     * @param ids 需要删除的租户管理ID
     * @return 结果
     */
    @Override
    public Boolean deleteByIds(String[] ids) {
        return removeByIds(Arrays.asList(ids));
    }

    /**
     * 删除租户管理信息
     * 
     * @param id 租户管理ID
     * @return 结果
     */
    @Override
    public Boolean deleteById(String id) {
        return removeById(id);
    }

}
